The client/server model which has emerged in the late 1980s is a versatile and modular software architecture that was intended to improve usability, flexibility, interoperability, and scalability as compared to centralized, mainframe, time sharing computing that was the norm at that time. A client is a requester of services and a server the provider of such services. Depending on the software configuration, a same machine can be both a client and a server.
The client/server architecture has progressively replaced the previous mainframe software architectures where all intelligence was within the central host computer and where users interacted with the host through a dumb terminal that only captures keystrokes and sends that information to the host. A well-known limitation of mainframe software architectures is that they do not easily support graphical user interfaces (GUI) or access to multiple databases from geographically dispersed sites. Mainframes are still however used as powerful servers in distributed client/server architectures.
The client/server architecture has introduced a database server acting as a file server. In this architecture user queries are answered directly using a relational database management system or RDBMS. The network traffic is reduced by providing a query response rather than always transferring complete files. It also improves multi-user updating through a GUI front end to a shared database. In client/server architectures structured query language (SQL) statements are typically used for the exchange of data between clients and servers.
With the two-tier client/server architecture (100) illustrated in FIG. 1 the user system interface is located in the user's desktop (102) environment and the database management services are in a server (104) that is able to service many clients. Processing management is split between the user system interface environment and the database management server environment. All combinations of topologies including single/multiple clients interfacing single/multiple servers (not shown), most often on a local area network or LAN (108), are obviously possible.
In the traditional two-tier architecture, the first tier, the client (102), holds the user interface, the main business and data processing logic. It accepts and checks syntax of user input, processes application logic, generates database requests, transmits them to server and passes response back to user tasks. The second tier, the data base server (104), accepts and processes database requests from clients, checks authorizations, ensures that integrity constraints are not violated, performs query/update processing and transmits responses to client. It also maintains system catalogue, provides concurrent database access and performs recovery control.
The two-tier client/server architecture has proved to be a good solution for distributed computing when work groups do not exceed 100 people interacting on a LAN simultaneously. However, when the number of users grows, performance begins to deteriorate as a result of the server maintaining a connection via “keep-alive” messages with each client, even though no work is being done. A second limitation of the two-tier architecture is that implementation of processing management services using vendor proprietary database procedures restricts flexibility and choice of RDBMS for applications. Also, implementations of the two-tier architecture have demonstrated limited flexibility in moving (repartitioning) program functionality from one server to another.
Then, the three-tier architecture (120) and multi-tier variants have emerged in the 90's to overcome the above limitations. In the three-tier architecture, a middle tier was added (126) between the user system interface client environment (122) and the database management server environment (124). Although there are a variety of ways of implementing this architecture and the middle tier, this latter is most often in charge of queuing, application execution, and database staging. Typically, a client delivers its request to the middle layer and disengages because the middle tier is due to access the data and returns the answer to the client. In addition the middle layer adds scheduling and prioritization for work in progress.
In the above variant of three-tier architecture the client, the first tier, may have to only perform the user interface i.e., validate inputs; in which case the middle tier holds all the business logic and does data processing while the server, the third tier, performs data validation and controls the database access.
The three-tier client/server architecture has been shown to improve performance for groups with a large number of users (typically, up to one thousand i.e., ten times the two-tier) and improves flexibility when compared to the two-tier approach especially because application code does not have to be shared between layers. The three-tier client/server architecture results in an environment that is considerably more scalable than two-tier architecture with direct client to server connection. It provides the ability to update multiple different RDBMS in a single transaction and can connect to a variety of data sources including flat files, non-relational database management systems, and also to mainframes now often used as powerful database servers. Three and multi-tier architectures thus best fit in large distributed client/server environments. For example, the ones airline reservation companies must deploy to serve their customers i.e.: the travel agencies around the world, and in which shared resources, such as heterogeneous databases (i.e., the air carriers fare and availability databases) and processing rules, are required.
If multi-tier data-centers have become a central requirement to providing such services reducing computation and communication overhead is crucial to further improving the performance and scalability. Caching dynamic content at various tiers of a multi-tier data-center is a well known method to reduce the computation and communication overheads so as even more customers can be served simultaneously since, in case of hit, data does not have to be fetched again from above situated tiers. However, caching in middle and front tiers has its own challenges. Cache consistency and cache coherence become issues that must be handled accordingly. Especially, for airline reservation where obsolete airline availability values are not acceptable, strong consistency and coherence is essential.